-- ============================================================ -- -- Target Functors for Tasks (task_functor.script) -- CoC 1.4.18 - DoctorX Questlines 1.18 -- -- Modified by: DoctorX -- Last revised: December 06, 2016 -- -- ============================================================ -- lostzone function task_targets_lostzone_all(task_id,field,p,tsk) if (field == "target") then if (task_id == "mar_smart_terrain_base_stalker_leader_marsh_task_2") then if (tsk.stage == 1) then return tsk.task_giver_id end local smart = SIMBOARD.smarts_by_names["mar_smart_terrain_doc_2"] local target_id = db.actor and load_var(db.actor,"mar_smart_terrain_doc_2_target_id") local se_target = target_id and alife_object(target_id) if (se_target and smart.position:distance_to_sqr(se_target.position) > 2500) then return target_id end return smart and smart.id or nil elseif (task_id == "cit_killers_merc_barman_mlr_task_4") then if (tsk.stage == 1) then return tsk.task_giver_id end local smart = SIMBOARD.smarts_by_names["red_smart_terrain_6_6"] local target_id = db.actor and load_var(db.actor,"red_smart_terrain_6_6_target_id") local se_target = target_id and alife_object(target_id) if (se_target and smart.position:distance_to_sqr(se_target.position) > 2500) then return target_id end return smart and smart.id or nil elseif (task_id == "mil_smart_terrain_7_10_freedom_trader_stalker_task_3") then if (tsk.stage == 1) then return tsk.task_giver_id end local smart = SIMBOARD.smarts_by_names["mil_smart_terrain_4_2"] local target_id = db.actor and load_var(db.actor,"mil_smart_terrain_4_2_target_id") local se_target = target_id and alife_object(target_id) if (se_target and smart.position:distance_to_sqr(se_target.position) > 2500) then return target_id end return smart and smart.id or nil elseif (task_id == "bar_dolg_leader_task_2") then if (tsk.stage == 1) then return tsk.task_giver_id end local smart = SIMBOARD.smarts_by_names["trc_sim_9"] local target_id = db.actor and load_var(db.actor,"trc_sim_9_target_id") local se_target = target_id and alife_object(target_id) if (se_target and smart.position:distance_to_sqr(se_target.position) > 2500) then return target_id end return smart and smart.id or nil elseif (task_id == "zat_b7_bandit_boss_sultan_task_5") then if (tsk.stage == 1) then return tsk.task_giver_id end local smart = SIMBOARD.smarts_by_names["val_smart_terrain_4_0"] local target_id = db.actor and load_var(db.actor,"val_smart_terrain_4_0_target_id") local se_target = target_id and alife_object(target_id) if (se_target and smart.position:distance_to_sqr(se_target.position) > 2500) then return target_id end return smart and smart.id or nil elseif (task_id == "zat_b7_bandit_boss_sultan_task_6") then if (tsk.stage == 1) then return tsk.task_giver_id end local smart = SIMBOARD.smarts_by_names["val_smart_terrain_6_4"] local target_id = db.actor and load_var(db.actor,"val_smart_terrain_6_4_target_id") local se_target = target_id and alife_object(target_id) if (se_target and smart.position:distance_to_sqr(se_target.position) > 2500) then return target_id end return smart and smart.id or nil elseif (task_id == "lttz_ll_fetch_gauss") then if (tsk.stage == 1) then local se_npc = get_story_se_object("stalker_rogue") return se_npc and se_npc.id or nil end local smart = SIMBOARD.smarts_by_names["zat_a23_smart_terrain"] local target_id = db.actor and load_var(db.actor,"zat_a23_smart_terrain_target_id") local se_target = target_id and alife_object(target_id) if (se_target and smart.position:distance_to_sqr(se_target.position) > 2500) then return target_id end return smart and smart.id or nil elseif (task_id == "lttz_ll_attack_on_titan") then if (tsk.stage == 1) then local se_npc = get_story_se_object("pri_a16_stalker_rogue") return se_npc and se_npc.id or nil end local smart = SIMBOARD.smarts_by_names["pri_sim_3"] local target_id = db.actor and load_var(db.actor,"pri_sim_3_target_id") local se_target = target_id and alife_object(target_id) if (se_target and smart.position:distance_to_sqr(se_target.position) > 2500) then return target_id end return smart and smart.id or nil elseif (task_id == "lttz_ll_eidolon") then if (tsk.stage == 1) then return tsk.task_giver_id end local smart = SIMBOARD.smarts_by_names["pri_monolith"] local target_id = db.actor and load_var(db.actor,"pri_monolith_target_id") local se_target = target_id and alife_object(target_id) if (se_target and smart.position:distance_to_sqr(se_target.position) > 2500) then return target_id end return smart and smart.id or nil elseif (task_id == "lttz_ll_chernobyl_raid") then if (tsk.stage == 1) then return tsk.task_giver_id end local smart = SIMBOARD.smarts_by_names["aes_smart_terrain_monolit_blockpost4"] local target_id = db.actor and load_var(db.actor,"aes_smart_terrain_monolit_blockpost4_target_id") local se_target = target_id and alife_object(target_id) if (se_target and smart.position:distance_to_sqr(se_target.position) > 2500) then return target_id end return smart and smart.id or nil elseif (task_id == "lttz_ms_red_forest_attackers") then if (tsk.stage == 1) then return tsk.task_giver_id end local smart = SIMBOARD.smarts_by_names["red_smart_terrain_6_3"] local target_id = db.actor and load_var(db.actor,"red_smart_terrain_6_3_target_id") local se_target = target_id and alife_object(target_id) if (se_target and smart.position:distance_to_sqr(se_target.position) > 2500) then return target_id end return smart and smart.id or nil elseif (task_id == "lttz_ms_runaway") then if (tsk.stage == 1) then return tsk.task_giver_id end local smart = SIMBOARD.smarts_by_names["red_smart_terrain_3_2"] local target_id = db.actor and load_var(db.actor,"red_smart_terrain_3_2_target_id") local se_target = target_id and alife_object(target_id) if (se_target and smart.position:distance_to_sqr(se_target.position) > 2500) then return target_id end return smart and smart.id or nil elseif (task_id == "lttz_ms_needle_haystack") then if (tsk.stage == 1) then local se_npc = get_story_se_object("stalker_stitch") return se_npc and se_npc.id or nil end local smart = SIMBOARD.smarts_by_names["trc_sim_14"] local target_id = db.actor and load_var(db.actor,"trc_sim_14_target_id") local se_target = target_id and alife_object(target_id) if (se_target and smart.position:distance_to_sqr(se_target.position) > 2500) then return target_id end return smart and smart.id or nil elseif (task_id == "bar_dolg_leader_task_3") then if (tsk.stage == 1) then return tsk.task_giver_id end local smart = SIMBOARD.smarts_by_names["zat_b103_merc_smart"] local target_id = db.actor and load_var(db.actor,"zat_b103_merc_smart_target_id") local se_target = target_id and alife_object(target_id) if (se_target and smart.position:distance_to_sqr(se_target.position) > 2500) then return target_id end return smart and smart.id or nil elseif (task_id == "cit_killers_merc_trader_stalker_task_4") then if (tsk.stage == 1) then return tsk.task_giver_id end local smart = SIMBOARD.smarts_by_names["zat_b103_merc_smart"] local target_id = db.actor and load_var(db.actor,"zat_b103_merc_smart_target_id") local se_target = target_id and alife_object(target_id) if (se_target and smart.position:distance_to_sqr(se_target.position) > 2500) then return target_id end return smart and smart.id or nil elseif (task_id == "esc_m_trader_task_4") then if (tsk.stage == 1) then return tsk.task_giver_id end local smart = SIMBOARD.smarts_by_names["zat_b103_merc_smart"] local target_id = db.actor and load_var(db.actor,"zat_b103_merc_smart_target_id") local se_target = target_id and alife_object(target_id) if (se_target and smart.position:distance_to_sqr(se_target.position) > 2500) then return target_id end return smart and smart.id or nil elseif (task_id == "mar_smart_terrain_base_stalker_leader_marsh_task_3") then if (tsk.stage == 1) then return tsk.task_giver_id end local smart = SIMBOARD.smarts_by_names["zat_b103_merc_smart"] local target_id = db.actor and load_var(db.actor,"zat_b103_merc_smart_target_id") local se_target = target_id and alife_object(target_id) if (se_target and smart.position:distance_to_sqr(se_target.position) > 2500) then return target_id end return smart and smart.id or nil elseif (task_id == "mil_smart_terrain_7_7_freedom_leader_stalker_task_7") then if (tsk.stage == 1) then return tsk.task_giver_id end local smart = SIMBOARD.smarts_by_names["zat_b103_merc_smart"] local target_id = db.actor and load_var(db.actor,"zat_b103_merc_smart_target_id") local se_target = target_id and alife_object(target_id) if (se_target and smart.position:distance_to_sqr(se_target.position) > 2500) then return target_id end return smart and smart.id or nil elseif (task_id == "lttz_oa_encrypted_transmission") then if (tsk.stage == 1) then local se_npc = get_story_se_object("army_degtyarev") return se_npc and se_npc.id or nil end local smart = SIMBOARD.smarts_by_names["zat_b100"] local target_id = db.actor and load_var(db.actor,"zat_b100_target_id") local se_target = target_id and alife_object(target_id) if (se_target and smart.position:distance_to_sqr(se_target.position) > 2500) then return target_id end return smart and smart.id or nil elseif (task_id == "lttz_hb_task_2_1_guarded_secrets") then if (tsk.stage == 1) then local se_npc = get_story_se_object("jup_depo_isg_leader") return se_npc and se_npc.id or nil end local smart = SIMBOARD.smarts_by_names["jup_b219"] local target_id = db.actor and load_var(db.actor,"jup_b219_target_id") local se_target = target_id and alife_object(target_id) if (se_target and smart.position:distance_to_sqr(se_target.position) > 2500) then return target_id end return smart and smart.id or nil end end end -- lostzone function yan_stalker_sakharov_task_target_4( task_id, field, p, tsk ) local squad = get_story_squad( "ecolog_companion_task_2" ) if ( db.actor and squad and squad.dist_to_actor and squad.dist_to_actor > 50 ) then return squad.id end local n = db.actor and load_var( db.actor, "task_target_anomaly" ) if ( n ) then local anomaly = db.anomaly_by_name[n] if ( anomaly and anomaly.object ) then return anomaly.object:id( ) end else local smart = SIMBOARD.smarts_by_names["yan_smart_terrain_6_4"] if ( smart ) then return smart.id end end end -- Determine current task target: function drx_sl_money_task_target( task_id, field, p, tsk ) if (field == "target") then if (tsk.stage == 1) then return tsk.task_giver_id end end end --'************************************************************************************* --' Функторы тайтла и описания квеста (должны возвращать строку) --'************************************************************************************* --- -- HELPERS ----------------------------------------------------------- function get_squad_id_by_task_var(var_name,no_check_online) local npc_id = db.actor and load_var(db.actor,var_name) if not (npc_id) then return end -- by default npc's id is returned instead if game_object is online if not (no_check_online) then local npc = npc_id and db.storage[npc_id] and db.storage[npc_id].object if (npc) then return npc_id end end local sim = alife() local se_npc = sim:object(npc_id) if not (se_npc) then return end local squad = se_npc.group_id and se_npc.group_id ~= 65535 and sim:object(se_npc.group_id) if not (squad) then if (no_check_online) then return end return npc_id end return squad.id end --------------------------------------------------------- -- TASK FUNCTORS --------------------------------------------------------- function general_escort_task(task_id,field,p,tsk) -- xQd, we need to inform the player the level they are supposed to escort the escorted at local lvl = db.actor and load_var(db.actor,"task_target_anomaly_level") local level_target = game.translate_string(lvl) if (field == "descr") then if (tsk.stage == 1) then return game.translate_string("st_return_for_reward") end return strformat(game.translate_string(p) or "",level_target) elseif (field == "title") then if level_target then return strformat(game.translate_string(p) or "Escort ","- " .. level_target) else return strformat(game.translate_string(p) or "Escort ","") end end end function general_warfare_task(task_id,field,p,tsk) -- xQd, add the name and the location of the warfare trader to the task description local id = tsk.task_giver_id local se_obj = id and alife_object(id) if not (se_obj) then --printf("is_task_giver_valid se_obj nil id=%s %s",id,tsk.id) return "" else local name = se_obj:character_name() local lvl = --[[game.translate_string(se_obj.community) or]] game.translate_string(alife():level_name(game_graph():vertex(se_obj.m_game_vertex_id):level_id())) if (field == "descr") then return strformat(game.translate_string(p) or "",name,lvl) end end end -- Yantar function yan_ecolog_semenov_task_target(task_id,field,p,tsk) if (task_id == "yan_ecolog_semenov_task_1") then local squad = get_story_squad("yan_ecolog_semenov_squad") if (squad and squad.dist_to_actor and squad.dist_to_actor > 50) then return squad.id end if (tsk.stage >= 1) then return squad.id end end end -- Determine current task target: function yan_ecolog_semenov_task_target_1( task_id, field, p, tsk ) local squad = get_story_squad( "yan_ecolog_semenov_squad" ) if ( db.actor and squad and squad.dist_to_actor and squad.dist_to_actor > 50 ) then return squad.id end if ( tsk.stage >= 1 ) then return squad.id end end -- -- Determine current task target: -- function mar_base_stalker_barmen_task_target(task_id,field,p,tsk) -- -- if (tsk and tsk.stage == 1 and tsk.task_giver_id) then -- return tsk.task_giver_id -- end -- -- if (task_id == "mar_base_stalker_barmen_task_1") then -- return under_faction_control_target_id(task_id) -- elseif (task_id == "mar_base_stalker_barmen_task_2") then -- return under_faction_control_target_id(task_id) -- end -- end function mar_base_owl_stalker_trader_task_target(task_id,field,p) -- xQd, heavily modified for warfare if (task_id == "mar_base_owl_stalker_trader_task_1" or task_id == "sim_default_csky_trader_task_1") then local se_npc = get_story_se_object("esc_2_12_stalker_nimble") return se_npc and se_npc.id or nil elseif (task_id == "mar_base_owl_stalker_trader_task_2" or task_id == "sim_default_csky_trader_task_2") then if (tsk and tsk.stage >= 1 and tsk.task_giver_id) then -- if actor destroyed a helicopter, return the trader's location return tsk.task_giver_id end --if (level.name() == "k00_marsh") then -- can target heli on any level for id,obj in pairs(db.heli) do if (obj and obj.id) then return id end end --end elseif (task_id == "mar_base_owl_stalker_trader_task_3" or task_id == "sim_default_csky_trader_task_3") then local squad = get_story_squad("ecolog_companion_task_1") if (db.actor and squad and squad.dist_to_actor and squad.dist_to_actor > 50) then return squad.id end local n = db.actor and load_var(db.actor,"task_target_anomaly") local target_level = db.actor and load_var(db.actor,"task_target_anomaly_level") local analyzed = db.actor and load_var(db.actor,"task_target_anomaly_analyzed") --printf("task_target_anomaly: %s ;task_target_anomaly_level: %s ;task_target_anomaly_analyzed: %s", n, target_level, analyzed) if (n) then local anomaly = db.anomaly_by_name[n] if (anomaly and anomaly.object) then return anomaly.object:id() else return squad.id end elseif (target_level) and (target_level == level.name()) and (analyzed) and (analyzed == "not_analyzed") then local targets = {} for k,v in pairs(db.anomaly_by_name) do table.insert(targets,k) end if (#targets <= 0) then return end local target_name = targets[math.random(#targets)] save_var(db.actor,"task_target_anomaly",target_name) elseif (analyzed) and (analyzed == "analyzed") then local smart local warfare_task = db.actor and load_var(db.actor,"warfare_escort_task_smart") if warfare_task then smart = SIMBOARD.smarts_by_names[warfare_task] else smart = SIMBOARD.smarts_by_names["mar_smart_terrain_base"] end if (smart) then return smart.id end elseif squad then return squad.id end end end -- Determine current task target: function mar_base_owl_stalker_trader_task_target_1( task_id, field, p ) local se_npc = get_story_se_object( "esc_2_12_stalker_nimble" ) return se_npc and se_npc.id or nil end -- Determine current task target: function mar_base_owl_stalker_trader_task_target_2( task_id, field, p ) if ( level.name( ) == "k00_marsh" ) then for id, obj in pairs( db.heli ) do if ( obj and obj.id ) then return id end end end end -- Determine current task target: function mar_base_owl_stalker_trader_task_target_3( task_id, field, p ) local squad = get_story_squad( "ecolog_companion_task_1" ) if ( db.actor and squad and squad.dist_to_actor and squad.dist_to_actor > 50 ) then return squad.id end local n = db.actor and load_var( db.actor, "task_target_anomaly" ) if ( n ) then local anomaly = db.anomaly_by_name[n] if ( anomaly and anomaly.object ) then return anomaly.object:id( ) end else local smart = SIMBOARD.smarts_by_names["mar_smart_terrain_base"] if ( smart ) then return smart.id end end end -- Escape function esc_m_trader_task_target(task_id,field,p,tsk) if (field == "target") then if (task_id == "esc_m_trader_task_1") then if (tsk.stage == 1) then return tsk.task_giver_id end local smart = SIMBOARD.smarts_by_names["esc_smart_terrain_7_11"] local target_id = db.actor and load_var(db.actor,"esc_m_trader_task_1_target_id") local se_target = target_id and alife_object(target_id) if (se_target and smart.position:distance_to_sqr(se_target.position) > 2500) then return target_id end return smart and smart.id or nil end end end -- Determine current task target: function esc_m_trader_task_target_1( task_id, field, p, tsk ) if ( field == "target" ) then if ( tsk.stage == 1 ) then return tsk.task_giver_id end local smart = SIMBOARD.smarts_by_names["esc_smart_terrain_7_11"] local target_id = db.actor and load_var(db.actor,"esc_m_trader_task_1_target_id") local se_target = target_id and alife( ):object( target_id ) if ( se_target and smart.position:distance_to_sqr( se_target.position ) > 2500 ) then return target_id end return smart and smart.id or nil end end -- Darkvalley function val_smart_terrain_7_4_bandit_trader_stalker_task_target(task_id,field,p,tsk) if (task_id == "val_smart_terrain_7_4_bandit_trader_stalker_task_3") then local squad = get_story_squad("bandit_companion_task_1") if (squad and squad.dist_to_actor and squad.dist_to_actor > 60) then return squad.id end end end -- Determine current task target: function val_smart_terrain_7_4_bandit_trader_stalker_task_target_1( task_id, field, p, tsk ) local squad = get_story_squad( "bandit_companion_task_1" ) if ( squad and squad.dist_to_actor and squad.dist_to_actor > 50 ) then return squad.id end end -- soc pripyat -- Jupiter function jup_b6_scientist_tech_task_target(task_id,field,p,tsk) -- xQd, heavily modified for warfare if (task_id == "jup_b6_scientist_tech_task_1" or task_id == "sim_default_ecolog_trader_task_1" or task_id == "yan_stalker_sakharov_task_2") then local squad = get_story_squad("ecolog_companion_task_2") if (squad and squad.dist_to_actor and squad.dist_to_actor > 60) then return squad.id end local n = db.actor and load_var(db.actor,"task_target_anomaly") local target_level = db.actor and load_var(db.actor,"task_target_anomaly_level") local analyzed = db.actor and load_var(db.actor,"task_target_anomaly_analyzed") if (n) then local anomaly = db.anomaly_by_name[n] if (anomaly and anomaly.object) then return anomaly.object:id() else return squad.id end elseif (target_level) and (target_level == level.name()) and (analyzed) and (analyzed == "not_analyzed") then local targets = {} for k,v in pairs(db.anomaly_by_name) do table.insert(targets,k) end if (#targets <= 0) then return end local target_name = targets[math.random(#targets)] save_var(db.actor,"task_target_anomaly",target_name) elseif (analyzed) and (analyzed == "analyzed") then local smart local warfare_task = db.actor and load_var(db.actor,"warfare_escort_task_smart") if warfare_task then smart = SIMBOARD.smarts_by_names[warfare_task] else smart = SIMBOARD.smarts_by_names["jup_b41"] end if (smart) then return smart.id end elseif squad then return squad.id end end end -- Determine current task target: function jup_b6_scientist_tech_task_target_1( task_id, field, p, tsk ) local squad = get_story_squad( "ecolog_companion_task_2" ) if ( db.actor and squad and squad.dist_to_actor and squad.dist_to_actor > 50 ) then return squad.id end local n = db.actor and load_var( db.actor, "task_target_anomaly" ) if ( n ) then local anomaly = db.anomaly_by_name[n] if ( anomaly and anomaly.object ) then return anomaly.object:id( ) end else local smart = SIMBOARD.smarts_by_names["jup_b41"] if ( smart ) then return smart.id end end end function jup_b19_freedom_yar_task_target(task_id,field,p,tsk) if (task_id == "jup_b19_freedom_yar_task_1") then if (tsk) then local squad if (tsk.stage == 0) then squad = get_story_squad("jup_a6_freedom_trader_ashot_squad") elseif (tsk.stage == 1) then squad = get_story_squad("jup_b19_freedom_yar_squad") end return squad and squad.id or nil end end end -- Zaton -- function zat_b7_bandit_boss_sultan_task_target(task_id,field,p) -- if (task_id == "zat_b7_bandit_boss_sultan_task_1") then -- return get_squad_id_by_task_var("zat_b7_bandit_boss_sultan_bounty_target_id") --add to axr_main remove_non_story_squads to ensure squad never removed -- end -- end function faction_base_defense_target(task_id,field,p,tsk) local squad = get_story_squad("faction_base_defense_flesh_squad") if (squad) then return squad.id end squad = get_story_squad("faction_base_defense_boar_squad") if (squad) then return squad.id end squad = get_story_squad("faction_base_defense_dog_squad") if (squad) then return squad.id end squad = get_story_squad("faction_base_defense_flesh_second_squad") if (squad) then return squad.id end squad = get_story_squad("faction_base_defense_boar_second_squad") if (squad) then return squad.id end squad = get_story_squad("faction_base_defense_dog_second_squad") if (squad) then return squad.id end squad = get_story_squad("yan_faction_base_defense_zombi_in_sci_base1") if (squad) then return squad.id end squad = get_story_squad("yan_faction_base_defense_zombi_in_sci_base2") if (squad) then return squad.id end squad = get_story_squad("yan_faction_base_defense_zombi_in_sci_base3") if (squad) then return squad.id end squad = get_story_squad("yan_faction_base_defense_zombi_in_sci_base4") if (squad) then return squad.id end squad = get_story_squad("yan_faction_base_defense_zombi_in_sci_base5") if (squad) then return squad.id end squad = get_story_squad("yan_faction_base_defense_zombi_in_sci_base6") if (squad) then return squad.id end squad = get_story_squad("yan_faction_base_defense_zombi_in_sci_base7") if (squad) then return squad.id end squad = get_story_squad("yan_faction_base_defense_zombi_in_sci_base8") if (squad) then return squad.id end squad = get_story_squad("yan_faction_base_defense_zombi_in_sci_base9") if (squad) then return squad.id end end --[[ ================================================================== ================================================================== --]] function condlist(id, field, cond_string) return xr_logic.pick_section_from_condlist(db.actor, nil, xr_logic.parse_condlist(nil, "task", "task_condlist", cond_string) ) end function zat_b29_adv_title(id, field, p) local actor = get_story_object("actor") for i = 16, 23 do if (has_alife_info(dialogs_zaton.zat_b29_infop_bring_table[i]) and actor:object(dialogs_zaton.zat_b29_af_table[i])) then title = "zat_b29_simple_bring_title_"..i break elseif has_alife_info(dialogs_zaton.zat_b29_infop_bring_table[i]) then title = "zat_b29_simple_find_title_"..i break end end return title end function zat_b29_adv_descr(id, field, p) local descr local f_af = 0 local actor = get_story_object("actor") for i = 16, 23 do if (has_alife_info(dialogs_zaton.zat_b29_infop_bring_table[i]) and actor:object(dialogs_zaton.zat_b29_af_table[i])) then f_af = 1 descr = "zat_b29_simple_bring_text_5" if has_alife_info("zat_b29_stalker_rival_1_found_af") and has_alife_info("zat_b29_first_rival_taken_out") and f_af ~= 0 then return descr elseif has_alife_info("zat_b29_stalker_rival_2_found_af") and has_alife_info("zat_b29_second_rival_taken_out") and f_af ~= 0 then return descr elseif has_alife_info("zat_b29_linker_take_af_from_rival") then descr = "zat_b29_simple_bring_text_4" elseif has_alife_info("zat_b29_stalkers_rivals_found_af") then descr = "zat_b29_simple_bring_text_3" elseif has_alife_info("zat_b29_rivals_search") and has_alife_info("zat_b29_exclusive_conditions") then descr = "zat_b29_simple_bring_text_1" elseif has_alife_info("zat_b29_rivals_search") then descr = "zat_b29_simple_bring_text_2" end break elseif has_alife_info(dialogs_zaton.zat_b29_infop_bring_table[i]) then descr = "zat_b29_simple_find_text_5" if has_alife_info("zat_b29_stalker_rival_1_found_af") and has_alife_info("zat_b29_first_rival_taken_out") and f_af ~= 0 then return descr elseif has_alife_info("zat_b29_stalker_rival_2_found_af") and has_alife_info("zat_b29_second_rival_taken_out") and f_af ~= 0 then return descr elseif has_alife_info("zat_b29_linker_take_af_from_rival") then descr = "zat_b29_simple_find_text_4" elseif has_alife_info("zat_b29_stalkers_rivals_found_af") then descr = "zat_b29_simple_find_text_3" elseif has_alife_info("zat_b29_rivals_search") and has_alife_info("zat_b29_exclusive_conditions") then descr = "zat_b29_simple_find_text_1" elseif has_alife_info("zat_b29_rivals_search") then descr = "zat_b29_simple_find_text_2" end break end end return descr end function surge_task_title(id, field, p) if GetEvent("current_safe_cover") then return "hide_from_surge_name_2" end return "hide_from_surge_name_1" end function surge_task_descr(id, field, p) return surge_manager.get_task_descr() end --'************************************************************************************* --' Функторы цели квеста (должны возвращать id персонажа) --'************************************************************************************* function target_condlist(task_id, field, cond_string) if not cond_string then return end local parsed_condlist = xr_logic.parse_condlist(nil, "task", "task_condlist", cond_string, task_id, field) local value = xr_logic.pick_section_from_condlist(db.actor, nil, parsed_condlist) return value and get_story_object_id(value) end function zat_b29_adv_target(task_id, field, p) local target_obj_id = "zat_a2_stalker_barmen" local af = nil local actor = get_story_object("actor") for i = 16, 23 do if (has_alife_info(dialogs_zaton.zat_b29_infop_bring_table[i]) and actor:object(dialogs_zaton.zat_b29_af_table[i])) then af = dialogs_zaton.zat_b29_af_table[i] break end end if (not has_alife_info("zat_b29_linker_take_af_from_rival") and has_alife_info("zat_b29_stalkers_rivals_found_af")) then if has_alife_info("zat_b29_stalker_rival_1_found_af") then if not has_alife_info("zat_b29_first_rival_taken_out") then if has_alife_info("zat_b29_exclusive_conditions") then target_obj_id = "zat_b29_stalker_rival_1" else target_obj_id = "zat_b29_stalker_rival_default_1" end elseif af == nil then if has_alife_info("zat_b29_exclusive_conditions") then target_obj_id = "zat_b29_stalker_rival_1" else target_obj_id = "zat_b29_stalker_rival_default_1" end end elseif has_alife_info("zat_b29_stalker_rival_2_found_af") then if not has_alife_info("zat_b29_second_rival_taken_out") then if has_alife_info("zat_b29_exclusive_conditions") then target_obj_id = "zat_b29_stalker_rival_2" else target_obj_id = "zat_b29_stalker_rival_default_2" end elseif af == nil then if has_alife_info("zat_b29_exclusive_conditions") then target_obj_id = "zat_b29_stalker_rival_2" else target_obj_id = "zat_b29_stalker_rival_default_2" end end end return get_story_object_id(target_obj_id) end if af ~= nil then return get_story_object_id(target_obj_id) end return nil end function surge_task_target(id, field, p) return surge_manager.get_task_target() end --AtmosFear Fallout function fallout_task_title(id, field, p) return fallout_manager and fallout_manager.get_task_title() or "" end function fallout_task_descr(id, field, p) return fallout_manager and fallout_manager.get_task_descr() or "" end function fallout_task_target(id, field, p) return fallout_manager and fallout_manager.get_task_target() or nil end --AtmosFear Psi Storm function psi_storm_task_title(id, field, p) return psi_storm_manager and psi_storm_manager.get_task_title() or "" end function psi_storm_task_descr(id, field, p) return psi_storm_manager and psi_storm_manager.get_task_descr() or "" end function psi_storm_task_target(id, field, p) return psi_storm_manager and psi_storm_manager.get_task_target() or nil end ----------------------------------------- function kill_strelok(id,field,p) local squad = get_story_squad("legendary_strelok") if (squad) then return squad.id end end function nil_target() return nil end